package com.info33.platform.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.info33.platform.common.mvc.vo.Result;
import com.info33.platform.system.dto.SysDictionaryDTO;
import com.info33.platform.system.entity.SysDictionary;
import com.info33.platform.system.vo.SysDictionaryVO;
import com.info33.platform.system.vo.SysUserVO;

import java.util.List;
import java.util.Map;

/**
 * @author admin
 */
public interface SysDictionaryService extends IService<SysDictionary> {

    /**
     * 索引搜索 + 分页
     *
     * @param page        分页对象
     * @param dto         入参
     * @param currentUser 当前用户
     * @return 对应键子集所有数据
     */
    Result<IPage<SysDictionaryVO>> appIndexesPage(Page<SysDictionary> page, SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * 索引搜索
     *
     * @param dto         入参
     * @param currentUser 当前用户
     * @return 对应键子集所有数据
     * @deprecated 分页的接口传 -1，-1 即会自动转换为查询全部
     */
    @Deprecated
    List<SysDictionaryVO> appIndexes(SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * pid 搜索
     *
     * @param page 分页对象
     * @param dto  入参
     * @return 对应键子集分页列表
     */
    IPage<SysDictionaryVO> appPid(Page<SysDictionary> page, SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * pid 搜索
     *
     * @param dto 入参
     * @return 对应键子集分页列表
     * @deprecated 分页的接口传 -1，-1 即会自动转换为查询全部
     */
    @Deprecated
    List<SysDictionaryVO> appPid(SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * app - 多个索引 JSONObject 集合
     *
     * @param dto         入参
     * @param currentUser 当前用户
     * @return jsonObject
     */
    Map<String, List<SysDictionaryVO>> publicIndexesList(SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * 门户 - 多个索引 JSONObject 集合（门户端查询，门户端无需登录无法获得tenant_id）
     *
     * @param dto 入参
     * @return jsonObject
     */
    Map<String, List<SysDictionaryVO>> publicGetIndexesList(SysDictionaryDTO dto);

    /**
     * pc - 回退
     *
     * @param page 分页对象
     * @param dto  入参
     * @return 回退父集
     */
    IPage<SysDictionaryVO> pcBack(Page<SysDictionary> page, SysDictionaryDTO dto);

    /**
     * pc - 逻辑删除
     *
     * @param id              id
     * @param sysCurrentUser-
     * @return object
     */
    Result<Object> pcMove(Long id, SysUserVO sysCurrentUser);

    /**
     * pc - 编辑
     *
     * @param dto-
     * @param sysCurrentUser-
     * @return -
     */
    Result<Object> pcEdit(SysDictionaryDTO dto, SysUserVO sysCurrentUser);

    /**
     * pc - 新增
     *
     * @param dto-
     * @param sysCurrentUser-
     * @return -
     */
    Result<Object> pcAdd(SysDictionary dto, SysUserVO sysCurrentUser);

    /**
     * pc - 树结构查询
     *
     * @param pid-
     * @return -
     * @deprecated 效率低，oa 使用到，暂不删除
     */
    @Deprecated
    List<SysDictionaryVO> pcTree(Long pid);

    /**
     * pc - 树结构查询 - 新
     *
     * @param indexes     -
     * @param currentUser 当前用户
     * @return -
     */
    List<SysDictionaryVO> pcTreeListByCode(String indexes, SysUserVO currentUser);

    /**
     * pc - 树结构数据
     *
     * @param dto         入参
     * @param currentUser 当前用户
     * @return vo
     */
    List<SysDictionaryVO> treeStructure(SysDictionaryDTO dto, SysUserVO currentUser);

    /**
     * 同级兄弟查询
     *
     * @param dto         入参
     * @param currentUser 当前用户
     * @return vo
     */
    List<SysDictionaryVO> publicBrother(SysDictionaryDTO dto, SysUserVO currentUser);
}